package top.infopub.mgr.mkt.service;

import top.infopub.enums.mkt.ProProcessDetailTypeEnum;
import top.infopub.model.mkt.ProProcessDetail;
import top.infopub.security.vo.AuthorizationVO;

import java.util.List;

/**
 * 市场管理--流程服务类
 */
public interface ProProcessManageService {
    /**
     * 市场管理-->发起流程
     * @param ppdt 节点枚举类，传入指定的枚举
     * @param detailJson 详情页面全部的json数据
     * @param bizSguid 业务表SGUID
     * @param proCode 项目编码
     * @param vo 登录人员信息
     * @return
     */
    String sendProcess(ProProcessDetailTypeEnum ppdt, String detailJson,
                       String bizSguid, String proCode, AuthorizationVO vo);

    /**
     * 市场管理-->项目审批
     * @param bizSguid 业务表SGUID
     * @param processId 流程ID
     * @param status 0=不同意 1=同意
     * @param auditMsg 审批意见
     * @param isTrack 是否继续跟踪(0-是,1-否)，非项目信息收集和项目跟踪传null值即可
     */
    void auditProject(String bizSguid, String processId, String status, String auditMsg, String isTrack);

    /**
     * 知会流程通用处理
     * @param templateId
     * @param thisIdxNo
     * @param processId
     * @param srcBizTable
     * @param srcBizSguid
     * @return 0：没有后续流程，大于0为当前知会节点idx
     */
    int notifyProcess(String templateId, Integer thisIdxNo, String processId, String srcBizTable, String srcBizSguid);

    /**
     * 查询项目当前所处节点
     * @param proCode
     * @return
     */
    ProProcessDetailTypeEnum queryProProcessType(String proCode);

    /**
     * 监察是否显示审批tab页
     * @param processId 流程Id
     * @return 0=不显示，1=显示
     */
    String checkShowAuditTab(String processId, AuthorizationVO vo);

    /**
     * 根据sguid获取项目编码
     * @param tableName 业务表名
     * @param id sguid
     * @return 项目编码
     */
    String getProCodeById(String tableName, String id);

    /**
     * 根据流程Id查询项目流程明细
     * @param processId
     * @return
     */
    ProProcessDetail queryByProcessId(String processId);

    /**
     * 查询流程中的指定审批角色人员
     * @param processId 流程Id
     * @param groupId 审批角色Id
     * @return
     */
    List<String> queryFinanceUserIdByProcessId(String processId, String groupId);

    /**
     * 修改指定表中的OA_ID
     * @param tableName 表名
     * @param oaId OAId
     * @param id SGUID
     */
    void modifyOaIdById(String tableName, String oaId, String id);
}

